<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 遍历对象  
        // for in
        // in  

        // 字符串 in 对象
        // 判断对象中是否有这个属性
        // 如果有 返回true 否则返回false


        //除了捕捉对象身上的
        //也可以捕捉原型上的属性 
        // const obj = {
        //     name:'张三',
        //     age:18
        // }

        // console.log('name' in obj); // true
        // console.log('gender' in obj); // false

        // function Person(name,age){
        //     this.name = name;
        //     this.age = age;
        // }

        // Person.prototype.gender = '男';

        // var p1 = new Person('张三',18);
        // console.log('gender' in p1); // true



        // 拷贝继承 就是 把父类所有的属性和方法 
        // 拷贝到子类的身上

       function Person(name,age){  
              this.name = name;
              this.age = age; 
        }

        Person.prototype.sayHello = function(){
            console.log('我是原型继承');
        }

        function Student(gender,...args){
            this.gender = gender;
            //在这里边创建一个父类的实例 
            const father = new Person(...args);
            for(let k in father){
                Student.prototype[k] = father[k];
            }
        }

        const s1 = new Student('男','张三',18);
        console.log(s1)

        // 优点 把父类的所有属性和方法都拷贝到了子类的原型身上
        // 也就是继承了父类的所有属性和方法


        // 组合继承 
        // 继承了父类的所有属性和方法 但是有缺点 
        // 在子类的原型上 多了一套属性

        // 拷贝继承 为了弥补组合继承的缺点 
    </script>
</body>
</html>